23

» WarCraft 3 / Строчка

Похожие вопросы:

ответ
статьи в помощь
на крайняк пиши свой аи на джасс
ответ
нужно занести все доступные здания в бд аи
подробнее в статьях
ответ
ответ
Все. Я нашел. Оказывается, изменить место расположения иконки можно и без файла "Units/CommandFunc.txt". Просто в способностях можно изменить.

23

» WarCraft 3 / Оплетение рудника

Похожие вопросы:

ответ
К руднику нужны нестандартные способности с участием "того самого" светляка.
ответ
оплетение рудника происходит методом замены объекта рудника на объект оплетённого рудника, никто не запрещает делать это вручную.
ответ
Через что уничтожаешь? Если через килл, то конечно умирает и нейтральный.
  1. Если наносить от какого-то даммика урон в мильены, то не умрет нейтральный.
  2. Можно от даммика развеяние нежити за 0.01 сек.
  3. Заменять можно, внося значение золота в переменную и потом, создавая новый рудник, ставить количество золота в него из переменной, благо это даже в ГУИ реализовано.
ответ
Ikobot:
Можно сделать способность на основе "превращения в зомби" с передачей контроля игроку. И сделать дамми работников, которые будут в невидимости таскать золото, в зависимости от кол-во рабов на борту рудника.
Можно сделать невидимое "Древо Жизни" которое привязано к зданию и живет до тех пор, пока живет главное здание, главное связать здания триггерно.
Я придумал закинуть пустить корни в книгу заклинаний и заблокировал ее, в вобщем оплетение работает, сейчас другая проблема в другом вопросе))

23

» WarCraft 3 / Рандом выбор .

Похожие вопросы:

ответ
GF RaiseD:
На сайте имеется статья. Если же тебя интересует как сделать чтобы эти расы можно было выбирать в меню игры, а не непосредственно в игре - ищи в гугле [Warcraft 3 Nirvana Mod]. Отвечая на вопрос: возможно.

23

» WarCraft 3 / Массивы

Похожие вопросы:

ответ
Local integer i = случайное число от 1 до 3
Local integer h = случайное число от 1 до 3
Local integer j = 0
Local integer k = взять кол-во юнитов в области locations[h]
Local location p
If k < 1 then
Set p = GetRectCenter( locations[h] )
Call createUnitAtLoc( buildings[i], player(0), p )
Loop
Exitwhen j > 3
Call createUnitAtLoc( units[i], player(0), p )
Set j = j + 1
Endloop
Call removeLocation(p)
Set p = null
Endif
Пишу с телефона, поэтому в карту заноси это сам
ответ
Это число обозначает, сколько элементов массива заполняется в начале игры значением по умолчанию. Настоящий размер массива всегда 8192.
Т.е. если ты ставишь "Раз. 3" и "Нач. знач. 1", то первые 3 элемента массива будут равны 1, а значение следующих будет неопределенным.
ответ
Чето совершенно непонятно что вам нужно, найти тот таймер и его индекс в массиве, который истек и запустил триггер?
Ну очень просто , перебором в цикле всех таймеров и смотреть кто истек, тот кто истек того индекс вы и получите, считая шаги цикла.
В чем проблема?.
(100+ таймеров и массив по мне идиотия, неужели нельзя было воспользоваться хештаблицей и создавать\удалять таймеры по мере надобности)
ответ
надо писать
effect array eff[5]
ответ
Самым эффективным решением будет периодический перенос юнита-инвентаря к герою, юниту можно дать boolean флаг "isSelected"

23

» WarCraft 3 / Нанесение урона

Похожие вопросы:

ответ
Полагаю, действия "группа игроков" - лишние. Просто пикай юнитов. И не в регионе, а в радиусе. Там должно быть действие "пикнуть юнитов в радиусе, которые соответствуют каким-то условиям". Вот в matching condition и проверяй "правильность" юнита.
ответ
на сколько я понял твой триггер срабатывает при получении урона определённым юнитом
и ты вызываешь в нём этот триггер
который наносит урон этому самому юниту
в результате опять срабатывает отлов урона
и опять наносится урон
и опять ...
в общем получается рекурсия и вар выкидывает из за переполнения стека
кстати почему бы не сделать отлов урона в 1 триггере?
ответ
Кастовать способности даммиком и отлавливать урон от него.
ответ
Как вариант, можно найти в системе действия, в которых триггерно наносится урон юниту (потеря жизней), и отлавливать уже оттуда.
ответ
Ghostly:
Hate, мне нужен рабочий вариант чтоб меняя свои данные я понял что влияет на работоспособность,а что нет.В твоей же я увидел цифры по 15сек думал атк и будет работать,а на деле только 9 сек рабочих.Напрашивается вывод где из всех тех цифр отвечающие за продолжительность. Может у кого есть уже наработка с хотами,дотами,периодическими событиями,киньте будьте добры,буду разбираться.
это и есть рабочий вариант, слов нет.
там урон наносится каждые 5 секунд в течении 15, если бы вы потратили хоть толику внимания на гребаные триггеры вы бы заметили цифры которые там есть
раз
два
три
читать умеем? считать умеем?

23

» WarCraft 3 / Строительство

Похожие вопросы:

ответ
Ну можно триггерно их "строить", когда нужно получать % их готовности.
Здание закладывать и паузить, триггерно увеличивать переменную и приравнивать в ней текущий % постройки.
Работоспособно.
ответ
Steal nerves:
Да. Сам id-приказ - равкод постройки (или тип постройки). У рабочего открывается меню строительства, выбираешь постройку, нажимаешь на иконку. Но ничего не происходит, так как надо еще для окончательного результата выбрать место строительства. Через событие "юнит - получил приказ (точка)" ловится приказ в тот момент, когда юнит получил приказ и побежал устанавливать основание. И точку приказа можно отследить.
ответ
Можно дать юниту какую-нить абилку и все время через Force UI Key заставлять игрока ее нажимать пока этот юнит выбран
И как только он эту абилку использует, значит меню закрыто
ответ
нет, скорее вшиты в коде, как заливка синим при нехватке маны

23

» WarCraft 3 / Стандартные способности

Принятый ответ
Похожие вопросы:

ответ
да
в движке вара
если найдёшь исходник вара
ответ
параметры способностей хранятся в slk таблицах в mpq архивах
параметры применения способностей хранятся в game.dll
ответ
Steal nerves:
В натуре баг такой? Проверил только что. Улучшение эльфам можно не делать на доспехи. Короче эльфы читеры
ответ
ии я очень сложный замутил 4х ступенчатый (не для босов)так как при строительстве его я думал что движок будет пулять спеллы,его придёться переписывать,но я нашел решение если за моба стоит комп то спелы во вкладке нейтрально посивные он будет юзать но не все главное условие чтобы был комп назначен
ответ
Сделай на основе берсерка и кидай сетку через созданного в позиции кастера даммика (невидимого юнита), даммика потом убираешь

23

» WarCraft 3 / Локальные

Принятый ответ
Похожие вопросы:

ответ
Решил проблему следующим путем: при несовпадении данных в Memory, заставляем читера выделить специального скрытого в тумане войны юнита, а в другом триггере по событии выделения пишем, что GetTriggerPlayer() - МХшник, и только потом кикаем его.
quq_CCCP:
Для бана нужна работа с хост ботом
Ты неправильно понял. Если люди по Гарене играют, то они должны знать, что игрок отключается по неуважительной причине, чтобы сразу его забанить и потом не париться с ним. Бан-то локальный в Гарене, не то что на хост-боте.
ответ
вот тебе пример моего кода, если что, спрашивай:
void Damage_Text() {
unit u1     = GetEventDamageSource(),u2=GetTriggerUnit()
real x      = GetRandomReal(GetUnitX(u2)-30,GetUnitX(u2)+30)
real y      = GetRandomReal(GetUnitY(u2)-30,GetUnitY(u2)+30)
real z      = GetRandomInt(30,70)
string text = I2S(R2I(GetEventDamage()))//переводим урон в строку
texttag tt  = CreateTextTag()
  if GetEventDamage()>0 and (IsUnitInGroup(u1,Pdmg) or IsUnitInGroup(u1,Sdmg)) then
    SetTextTagVisibility(tt,false)//делаем тексттег невидимым
    if IsUnitInGroup(u1,Crit) then
      text=Yellow+"!|r "+text
    endif
    SetTextTagText(tt,text,0.023)
    if GetLocalPlayer()==GetOwningPlayer(u1) then//делаем тексттег видимым локальным игрокам
      SetTextTagColor(tt,255,255,255,230)
      SetTextTagVisibility(tt,true)
    elseif GetLocalPlayer()==GetOwningPlayer(u2) then
      SetTextTagColor(tt,200,0,0,230)
      SetTextTagVisibility(tt,true)
    endif
    SetTextTagPos(tt,x,y,z)
    SetTextTagPermanent(tt,false)
    SetTextTagVelocityBJ(tt,50,90)
    SetTextTagFadepoint(tt,0.5)
    SetTextTagLifespan(tt,1)
  endif
tt=null
u2=null
u1=null
ответ
Если память не изменяет
location

23

» WarCraft 3 / Способность

Похожие вопросы:

ответ
Когда юнит проучивает пассивку, добавляй в группу юнита, который выучил пассивку. Дальше все просто -
Юнит умирает
Киллинг юнит в нашей группе - да
Дайинг юнит не в команде владельца киллинг юнит.
Игрок - адд проперти - 500 золото (овнер оф киллинг юнит)
ответ
Сделай на основе берсерка и кидай сетку через созданного в позиции кастера даммика (невидимого юнита), даммика потом убираешь
ответ
XGM Bot:
Похожие вопросы:

ответ
ИИ написать, сами скиллы юзают тока крипы подконтрольные ИИ - к примеру нейтральновраждебные.
Так же можно юзать скилл - Сфера замедления, это орб эффект который срабатывая накладывает на цель атаки указанный в его настройках скилл, подойдет для карт типа Castle Fight.
ответ
ИИ чтоли не кастует? Сделай триггерный каст, Событие - юнит обнаружил цель в пределах досягаемости, проглотить не в кулдауне и цель неуязвимый враг, пойти и проглотить юнита...
ответ
Fireproof, попробуй в РО у юнита поменять "Графика - Анимация - обратный ход броска" и "Графика - Анимация - точка броска" на 0. Правда, это уберёт время каста для всех умений у этого юнита.
ответ
Ну тебе нужно чтобы был прямо таки бафф который можно рассеивать?
Для начала сделай способность, и баф на основе какой нибудь пустышки, подойдет ярость у некромантов, так же переодический триггер который раз в пол секунды проверяет всех юнитов в группе, есть ли у них бафф если юнит мертв или у него нет баффа, то у юнита удаляется способность на доп урон зданиям и сам унит удаляется из группы.
При касте твоим шаманов заклинания на цель, ты добавляешь цель заклинания в группу, которую и перебирает описанный выше триггер.
Надеюсь понятно?
ответ
datar1231, Именно поэтому говорят не делать 2 две способности от друга потому когда юнита приходит приказ на использование способности он использует твою нестандартную способность но основываясь на айди стандартной способности или делай на основе другой или незанаю подействует ли канал.


23

» WarCraft 3 / Проиграть анимацию

Похожие вопросы:

ответ
Иллюзии недо-юниты, они не могут использовать активки и предметы, лишь некоторые пассивки работают у иллюзий ( втом. числе и те что добавили триггерно).
Иллюзий найти плевое дело, есть проверка IsUnitIllision а так же событие Юнит призвал вызванное существо, ибо все иллюзии суммоны от конкретных способностей, создать иллюзию триггерно, без способности и юнита не получится...
Если вам нужны именно клоны героя (как арк варден в доте или мипо) то вам нужно создавать героя, обнулять у него все лишнее (вроде отображать как героя на карте команд, скрыть сообщение о гибели), так же необходимо триггерное слежение за такой иллюзией.
ответ
у Сларка это даммик, который двигается вместе с ним, и потом ремувится
у Баланара - лопается, когда день наступает... присмотришь получше
ответ
Astra:
Скорее всего в триггере стоит локальный игрок красного цвета. Скрин в студию
Во время инициализации карты в стартовой позиции игрока создается 1 висп.
Заменил триггер на другой, все заработало.
molot39:
Может проще будет после постройки здания сделать reset animation - на trigger unit
Увы, не работает.
Одним словом, я просто взял модель виспа, удалил у него все анимации, кроме stand, импортировал в карту, прописав путь к файлу, как к файлу модели оригинального виспа.
ответ
Отлавливать улучшение и делать триггерную анимацию. Способов достаточно много и без редактирования модели.
ответ
Без работы над памятью - никак. итемы не имеют подобных функций, доступных картоделу

23

» WarCraft 3 / незанятый рабочий

Похожие вопросы:

ответ
Никак.
Хотя если рыть очень глубоко с шрифтами, то возможно одна из категорий шрифта отвечает за эту циферку. Если повезёт - она при этом не будет отвечать ни за какие другие экранные шрифты в игре. Заменить шрифт в этой категории на малюсенький или бесцветный какой-нить - вот и удалили циферку. Как менять щрифт в карте отдельная статья.
ответ
Никого не слушай учись на картах близов, там есть все.
Смотри как устроены модели, эфекты и текстуры, особенно ланшафт, только не смотри как устроены здания как декорации(построение города), там фантазия их подвела.

23

» WarCraft 3 / Нужна моделька.

Похожие вопросы:

ответ
Начнём с того, что нужно было обратиться сюда: xgm.guru/p/wc3/needmodels#lastpost
А сделать я мог бы и сам, но сейчас не могу.
ответ
исправил ресурс
ответ
Ну, во - первых, есть вот этот пак: xgm.guru/p/wowmodels/winterdoodads
если не подходит, импортируй текстуру, которую я делал для одной карты и задай ей путь в менеджере импорта textures\Ruins_PlantLife.blp и перезагрузи карту, она заменит стандартные модельки кустов, грибов и лозы на "зимние". Текстуру прилагаю.
ответ
Вот в эту тему, пожалуйста: xgm.guru/p/wc3/needmodels
ответ
Steal nerves:
Модель стандартная?
раскрыть
раскрыть
не работает когда руну берешь? делал по этой статье xgm.guru/p/wc3/powerups
короче эффект не срабатывает из-за этого

23

» WarCraft 3 / Анимация меча

Похожие вопросы:

ответ
Если в редакторе моделей видно, что разные комплекты анимацый имеют характерные названия, например, все с луком заканчиваются словом bow , тогда команда Animation - add animation tag " bow " to unit.
Вот пример: пример
ответ
Тег - это добавление к названию анимации. Он пишется через пробел и триггерно добавить можно только определённые теги.
Ты пытаешься добавить полное имя анимации как тег.
Тебе следует переименовать анимацию attack 2 в мдлвизе например в attack first.
Тогда, при подбирании меча добавляй тег "first"
ответ
Можно:
  • Создать проект, пройти модерацию и добавить в него ресурс с вакансией — он появится в ленте ресурсов.
  • Написать в свой блог, запись будет в ленте блогов, соответственно.
  • Обратиться сюда (но этот ресурс, вроде, не особо активен.
Но в «Вопросы» писать не надо.
ответ
мне мои вопросы кажуться легко решаемыми
это только кажется
реально это тот ещё геморрой
попробуй сам реализовать пункт 4 (имхо самый простой из всего)
ответ
Покопаться можно в следующих пунктах
Бой Атака1-
приблизительно первые 2-7 пункты
анимация точки обратного хода
анимация точки повреждения
.....
время перезарядки
PS не факт что результат устроит

23

» WarCraft 3 / Блокиратор пути

Похожие вопросы:

ответ
сдается мне, что это не возможно без костылей, или же эту фичу юзали все картоделы :\
можно приподнимать декорации с помощью cntrl или shit + page down/page up, но это сугубо визуально, физически они будут все равно размещены внизу
на ум приходит только установка необходимой высоты всем проходящим по верхней стороне юнитам, но там будет другой геморрой (к примеру, если по мосту бежит несколько пехотинцев, враждебных друг другу, пехотинцы на верхней стороне не смогут быть атакованы, так как будут считаться "летающими")
ответ
Sergey103, для этого выбери один блокиратор, потом нажми на "Правка" и нажми "Выбрать все особые", потом просто удали их.
ответ
Steal nerves:
Все разобрался, я с обычной декорации сильно протупил, невнимательность.
Еще нашел другой способ, см. карту
ответ
Steal nerves:
Вот. Есть текст про описание движения как я понял (вот в чем разница между конным и пешим пока тоже не понял, интересует вот, что дает конный)
Эти паффинги, и типы движения взаимосвязаны. У некоторых есть баги, которыми можно воспользоваться. Например, чтобы летающие юниты игнорили ландшафт и летели прямо (вот на клифах может быть криво). На форуме дофига такого. Также можно сделать нелетающих летающими, дать сфинкс или превратиться в ворона (тоже баг) Ну и так далее
Как запретить перемещаться:
  1. Блокираторы пути. Есть баги короче xgm.guru/p/wc3/181384
  2. см. карту SetPathingRect (скачал с хайва)
ответ
Уменьшить скорость, и каждый маленький отрезок пути проверять проходимость пути. Если непроходим, то остановить способность.

23

» WarCraft 3 / Интерфейс

Похожие вопросы:

ответ
Заменим, только без внешнего софта новые элементы не добавить, но стандартыне редактируются в FDF
ответ
Нет
ответ
Viktor19:
кук пытается тебе втолковать, что неизвестный тип атаки - это технический тип урона, он используется для реализации стандартных спеллов и детектов дебаффа
Обычному юниту такой урон не поставить, как и тип защиты
ответ
Нет. Во вкладке интерфейс вы можете посмотреть все, что можете поменять

23

» WarCraft 3 / Канал

Принятый ответ
Похожие вопросы:

ответ
Altf40160:
Steal nerves:
Спасибо, но меня интересует как рас "событие - юнит применяет способность" как же заставить героя компьютера использовать скилл!?
ставишь айди приказа и в условиях проверяешь его, например если у канала стоит айди thunderbolt, то в триггерах это будет молот бурь
ответ
Как проверю функции - залью сюда
У меня с многоуровневым каналом работает
Area
function GetAbilityArea takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*6))
endfunction
function SetAbilityArea takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*6, cleanInt(realToIndex(NewValue)))
endfunction
Range
function GetAbilityRange takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*7))
endfunction
function SetAbilityRange takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*7, cleanInt(realToIndex(NewValue)))
endfunction
PS: thx lich
ответ
8gabriel8, ты не понял его просто
8gabriel8, у способности канал
есть параметр id спелов
в нем ты можешь выставить ид канала на пример будто воин применяет не канал а молот бурь
сейчас сделаю скрин
вот
то что в той строке написано пишешь в функцию как строку "channel" ну или другое ид если менял
Sergey105, кд спела узнать вроде нельзя без мемхака , но можно сделать триггер на каст спела

23

» WarCraft 3 / Канал

Похожие вопросы:

ответ
Altf40160:
Steal nerves:
Спасибо, но меня интересует как рас "событие - юнит применяет способность" как же заставить героя компьютера использовать скилл!?
ставишь айди приказа и в условиях проверяешь его, например если у канала стоит айди thunderbolt, то в триггерах это будет молот бурь
ответ
Как проверю функции - залью сюда
У меня с многоуровневым каналом работает
Area
function GetAbilityArea takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*6))
endfunction
function SetAbilityArea takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*6, cleanInt(realToIndex(NewValue)))
endfunction
Range
function GetAbilityRange takes integer id, integer lvl returns real
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
return mI2R(RMem(k + 4*26*(lvl-1) + 4*7))
endfunction
function SetAbilityRange takes real NewValue, integer id, integer lvl returns nothing
local integer k = RMem(GetAbilityDataDefById(id) + 4*21)
call WMem(k + 4*26*(lvl-1) + 4*7, cleanInt(realToIndex(NewValue)))
endfunction
PS: thx lich
ответ
8gabriel8, ты не понял его просто
8gabriel8, у способности канал
есть параметр id спелов
в нем ты можешь выставить ид канала на пример будто воин применяет не канал а молот бурь
сейчас сделаю скрин
вот
то что в той строке написано пишешь в функцию как строку "channel" ну или другое ид если менял
Sergey105, кд спела узнать вроде нельзя без мемхака , но можно сделать триггер на каст спела

23

» WarCraft 3 / Затемнение

Похожие вопросы:

ответ
Спецэффекты - advanced filter - белая маска, начиная со цвета 0 0 0 и 50% прозрачности и заканчивая таким же.
ответ
Так?
ответ
TripleKor:
Модель света и триггер способности:
Проверку на уровень можешь убрать и крепить ещё один источник просто с изучением способности.
источник света не работает
ответ
есть триггер Спецэффекты - Fade Filter
ответ
XGM Bot:
Похожие вопросы:

ответ
Спецэффекты - advanced filter - белая маска, начиная со цвета 0 0 0 и 50% прозрачности и заканчивая таким же.
ответ
есть триггер Спецэффекты - Fade Filter
ответ
Зайти в кампанию и посмотреть. Не?


23

» WarCraft 3 / Стены

Похожие вопросы:

ответ
Исправляется путем вставки иной точки вместо Point1, к примеру на TempPoint, в триггере, что вызывается интервалом.
Вот исправленный вариант твоей ужасосистемы... и как писал тут дадька nvc123:
вот только эта система генерирует точки кучами
На что ты должен обратить внимание в первую очередь!
И забыл написать, что так же последняя пуля тоже не учитывается. Лечится прямыми руками и внимательным чтением ресурсов данного сайта. Ибо тем по этому поводу тут полно...
ответ
~16GB:
Создаёт стену из магического льда, которая отталкивает противников от себя.
function IsUnitDeadBX takes unit u returns boolean
return GetUnitTypeId(u) == 0 or IsUnitType(u, UNIT_TYPE_DEAD)
endfunction

function IsTarget takes unit u,unit d returns boolean
return not IsUnitType(u,UNIT_TYPE_ANCIENT) and not IsUnitDeadBX(u)  and not IsUnitType(u, UNIT_TYPE_STRUCTURE) and not IsUnitType(u, UNIT_TYPE_MAGIC_IMMUNE) and (IsUnitEnemy(u, GetOwningPlayer(d)) or GetOwningPlayer(u) == Player(15))
endfunction

function SQ takes real xa, real ya, real xb, real yb returns real
return SquareRoot((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb))
endfunction

function SafeX takes real pxx returns real
local real lfr=GetRectMinX(bj_mapInitialPlayableArea)+50
if(pxx<lfr)then
return lfr
endif
set lfr=GetRectMaxX(bj_mapInitialPlayableArea)-50
if(pxx>lfr)then
return lfr
endif
return pxx
endfunction

function SafeY takes real pyy returns real
local real lfr=GetRectMinY(bj_mapInitialPlayableArea)+50
if(pyy<lfr)then
return lfr
endif
set lfr=GetRectMaxY(bj_mapInitialPlayableArea)-50
if(pyy>lfr)then
return lfr
endif
return pyy
endfunction

function UBU takes unit u, unit d, unit c , real w returns boolean
local real x = GetUnitX(u)
local real y = GetUnitY(u)
local real r1 = 57.295827*Atan2(y-GetUnitY(d),x-GetUnitX(d))
local real r2 = 57.295827*Atan2(y-GetUnitY(c),x-GetUnitX(c))
set r2 = r2 -180
if r1 < 0.00 then
set r1 = r1 + 360
endif
if r2 < 0.00 then
set r2 = r2 + 360
endif
if r1 - r2  <= w and r1 - r2  >= -(w) then
return true
else
return false
endif
endfunction


function IceWallCon takes nothing returns boolean
return GetSpellAbilityId() == 'A0KP'
endfunction

function IceWallCreate takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit c = LoadUnitHandle(udg_AssassinHash,id,0)
local real r = LoadReal(udg_AssassinHash,id,3)
local integer i = LoadInteger(udg_AssassinHash,id,4)
local integer j = LoadInteger(udg_AssassinHash,id,5)
local real x = LoadReal(udg_AssassinHash,id,StringHash("X"))
local real y = LoadReal(udg_AssassinHash,id,StringHash("Y"))
local real a = 0.
local real b = 0.
local boolean e = LoadBoolean(udg_AssassinHash,id,6)
local boolean f = LoadBoolean(udg_AssassinHash,id,7)
local boolean k = LoadBoolean(udg_AssassinHash,id,8)
local integer n = LoadInteger(udg_AssassinHash,id,25)
local real X2 = LoadReal(udg_AssassinHash,id,StringHash("X2"))
local real Y2 = LoadReal(udg_AssassinHash,id,StringHash("Y2"))
local real X3 = LoadReal(udg_AssassinHash,id,StringHash("X3"))
local real Y3 = LoadReal(udg_AssassinHash,id,StringHash("Y3"))
local integer h = 0
local group g = LoadGroupHandle(udg_AssassinHash,id,2)
local unit u
local unit d
local unit d1
if e == false then
set i = i+1
set j = j+1
if i < 7 then
set a = SafeX(x+(80.*i)*Cos(r))
set b = SafeY(y+(80.*i)*Sin(r))
set d = CreateUnit(GetOwningPlayer(c),'e00V',a,b,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",a,b))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",a,b))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU1"+I2S(i)),d)
set a = SafeX(x-(80.*j)*Cos(r))
set b = SafeY(y-(80.*j)*Sin(r))
set d = CreateUnit(GetOwningPlayer(c),'e00V',a,b,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",a,b))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",a,b))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU2"+I2S(j)),d)
call SaveInteger(udg_AssassinHash,id,4,i)
call SaveInteger(udg_AssassinHash,id,5,j)
else
call SaveBoolean(udg_AssassinHash,id,6,true)
endif
else
if f == false then
call SaveInteger(udg_AssassinHash,id,4,0)
call SaveReal(udg_AssassinHash,id,3,r-1.566)
call TimerStart(t,.025,true,function IceWallCreate)
call SaveBoolean(udg_AssassinHash,id,7,true)
else
set i = i+1
if i < 201 then
call SaveInteger(udg_AssassinHash,id,4,i)
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU16"))
set d1 = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU26"))
call GroupClear(udg_G)
call GroupEnumUnitsInRange(udg_G,x,y,1040,null)
loop
set u = FirstOfGroup(udg_G)
if IsTarget(u,c) and UBU(u,d,d1,20.) and IsUnitInGroup(u,g) == false then
call GroupAddUnit(g,u)
if GetUnitAbilityLevel(c,'B009') > 0 then
call UnitDamageTarget(c,u,150.+80.*GetUnitAbilityLevel(c,'A0KP'),true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
else
call UnitDamageTarget(c,u,75.+40.*GetUnitAbilityLevel(c,'A0KP'),true,true,ATTACK_TYPE_NORMAL,DAMAGE_TYPE_MAGIC,null)
endif
set n = n+1
call SaveInteger(udg_AssassinHash,id,25,n)
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(n)),15)
if SQ(X3,Y3,GetUnitX(u),GetUnitY(u)) > SQ(X2,Y2,GetUnitX(u),GetUnitY(u)) then
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(n)),LoadReal(udg_AssassinHash,id,20))
else
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(n)),LoadReal(udg_AssassinHash,id,21))
endif
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(n)),u)
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\FrostArrows\\NagaColdArrowMissile.mdl",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
call GroupRemoveUnit(udg_G,u)
exitwhen u == null
endloop
set i = 1
if n > 0 then
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))-1
set r = LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)),h)
call SetUnitPathing(u,false)
call SetUnitX(u,SafeX(GetUnitX(u)+15.*Cos(r)))
call SetUnitY(u,SafeY(GetUnitY(u)+15.*Sin(r)))
call IssueImmediateOrder(u,"stop")
if ModuloInteger(h,3) == 0 then
call DestroyEffect(AddSpecialEffectTarget("FrozenOrbBall.mdx",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
if h <= 0 or IsUnitDeadBX(u) or not IsTarget(u,c) then
set j = i
call GroupRemoveUnit(g,u)
call SetUnitPathing(u,true)
loop
exitwhen j > n
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j)),LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j+1))))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j)),LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j+1))))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j)),LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j+1))))
set j = j + 1
endloop
set n = n-1
call SaveInteger(udg_AssassinHash,id,25,n)
endif
set i = i + 1
endloop
endif
else
set i = 1
if n > 0 then
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))-1
set r = LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)),h)
call SetUnitPathing(u,false)
call SetUnitX(u,SafeX(GetUnitX(u)+15.*Cos(r)))
call SetUnitY(u,SafeY(GetUnitY(u)+15.*Sin(r)))
call IssueImmediateOrder(u,"stop")
if ModuloInteger(h,3) == 0 then
call DestroyEffect(AddSpecialEffectTarget("FrozenOrbBall.mdx",u,"chest"))
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",u,"chest"))
endif
set i = i + 1
endloop
set i = 1
loop
exitwhen i > n
set h = LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(i)))
set u = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(i)))
if h <= 0 or IsUnitDeadBX(u) then
set j = i
call GroupRemoveUnit(g,u)
call SetUnitPathing(u,true)
loop
exitwhen j > n
call SaveReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j)),LoadReal(udg_AssassinHash,id,StringHash("IWR"+I2S(j+1))))
call SaveInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j)),LoadInteger(udg_AssassinHash,id,StringHash("IWI"+I2S(j+1))))
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j)),LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"+I2S(j+1))))
set j = j + 1
endloop
set n = n-1
call SaveInteger(udg_AssassinHash,id,25,n)
endif
set i = i + 1
endloop
endif
if k == false then
set j = 1
loop
exitwhen j > 6
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU1"+I2S(j)))
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call KillUnit(d)
set j = j + 1
endloop
set j = 1
loop
exitwhen j > 6
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU2"+I2S(j)))
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call KillUnit(d)
set j = j + 1
endloop
set d = LoadUnitHandle(udg_AssassinHash,id,StringHash("IWU"))
call KillUnit(d)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",GetUnitX(d),GetUnitY(d)))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",GetUnitX(d),GetUnitY(d)))
call SaveBoolean(udg_AssassinHash,id,8,true)
endif
if k and n <= 0 then
call DestroyGroup(g)
call DestroyTimer(t)
call FlushChildHashtable(udg_AssassinHash,id)
endif
endif
endif
endif
set t = null
set c = null
set d = null
set d1 = null
set g = null
set u = null
endfunction

function IceWall takes nothing returns nothing
local unit c =  GetSpellAbilityUnit()
local real a = GetUnitX(c)
local real b = GetUnitY(c)
local real x = SafeX(GetSpellTargetX())
local real y = SafeY(GetSpellTargetY())
local real r = Atan2(y-b,x-a)+1.566
local timer t = CreateTimer()
local real dist = SQ(a,b,x,y)*2.
local integer id = GetHandleId(t)
local unit d
set d = CreateUnit(GetOwningPlayer(c),'e00V',x,y,0)
call UnitAddAbility(d,'Arav')
call UnitRemoveAbility(d,'Arav')
call SetUnitFlyHeight(d,150,0)
call SaveUnitHandle(udg_AssassinHash,id,StringHash("IWU"),d)
call DestroyEffect(AddSpecialEffect("FrozenOrbBall.mdx",x,y))
call DestroyEffect(AddSpecialEffect("Abilities\\Weapons\\SpiritOfVengeanceMissile\\SpiritOfVengeanceMissile.mdl",x,y))
call SaveUnitHandle(udg_AssassinHash,id,0,c)
call SaveReal(udg_AssassinHash,id,3,r)
set r = Atan2(y-b,x-a)
call SaveReal(udg_AssassinHash,id,20,r)
call SaveReal(udg_AssassinHash,id,21,Atan2(b-y,a-x))
call SaveReal(udg_AssassinHash,id,StringHash("X2"),a+dist*Cos(r))
call SaveReal(udg_AssassinHash,id,StringHash("Y2"),b+dist*Sin(r))
call SaveReal(udg_AssassinHash,id,StringHash("X3"),a)
call SaveReal(udg_AssassinHash,id,StringHash("Y3"),b)
call SaveGroupHandle(udg_AssassinHash,id,2,CreateGroup())
call SaveReal(udg_AssassinHash,id,StringHash("X"),x)
call SaveReal(udg_AssassinHash,id,StringHash("Y"),y)
call TimerStart(t,.025,true,function IceWallCreate)
set t = null
set c = null
set d = null
endfunction
ответ
Грубый пример:
Событие - постройка завершена
Действие: Если тип юнита (построенное здание) = стена,
то установить переменую-точку = позиция (построенного здания),
удалить (построенное здание)
создать декорацию типа "Стена-декорация" в точке-переменной
удалить точку

Пишу с работы, редактора под рукой нет. Прошу за ошибки и неточности простить))
ответ
RedLegion:
dave_wwid:
Есть статья в базе
Basile2:
Текстуру перерисуй и будет счастье
Не силён в таких делах. Хотелось просто и без гемора найти модель. Видел на картах есть такие, но увы они запротекчены.
Открой прогой mpq editor

23

» WarCraft 3 / Не получать опыта за героя

Похожие вопросы:

ответ
Так?
ответ
закрыт по таймауту
ответ
Лимит операций, обычно это беда настигает заядлых гуишников.
На jass обычно нету таких проблем.
Создайте таймер с периодом .00 сек и запускайте им функции инициализации триггеров.
функция типа InitTrig_Имя триггера - это функция инициализации триггера, она вызывается из функции InitCustomTriggers, но если этих вызовов очень много то функция упирается в лимит операций и поток завершается так и не создав все триггеры.

23

» WarCraft 3 / Опыт

Похожие вопросы:

ответ
При убийстве дракона поставить проверку условия, что убивающий юнит принадлежит красному игроку.
А в действиях - 2 варианта.
Вариант 1. Триггерно уменьшить опыт убивающему герою на количество, равное данному за убийство.
Но если уровень повысится - точно не знаю, сработает ли.
Вариант 2. Убрать в РО опыт за убийство и добавлять его убивающему герою триггерно.
Лучше использовать второй.
WarSC:
Легко
Так написал бы ответ, раз легко )
Человек за помощью обратился всё же.
ответ
Порылся в игровых константах (Вкладка "Дополнительно"). Если изменить указанный пункт, можно задать часть получаемого опыта при отрыве уровня героя. Если поставить все числа 100, то всегда будет даваться полный объем опыта. Можно поставить последнее число 50, тогда при большом отрыве уровней, будет даваться только половина опыта. Как-то так. Могу ошибаться
ответ
А исправить эти его "тупые" действия никак нельзя?
переписать ai скрипты
он хранится в mpq архивах в файлах с расширением .ai
например аи для людей хранится в файле human.ai
ответ
игровые константы - опыт: общее распределение - поменяй на "нет"....